package ManagedBeans;

import ComponenteDatos.AgenciaFacadeLocal;
import ComponenteDatos.EmpresaFacadeLocal;
import ComponenteEntidad.Agencia;
import ComponenteEntidad.Ciudad;
import ComponenteEntidad.Departamento;
import ComponenteEntidad.Empresa;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

@ManagedBean
@SessionScoped
public class ManagedBeanAgencia implements  Serializable{

    @EJB
    private AgenciaFacadeLocal AgenciaFacade;
    @EJB
    private EmpresaFacadeLocal EmpresaFacade;
    private Agencia objetoAgencia;
    private Agencia objetoAgenciaCrear;
    private Empresa objetoEmpresa;
    private Ciudad objetoCiudad;
    private List<Agencia> lista;
    private List<SelectItem> objetoItems = new LinkedList<SelectItem>();
    private HashMap<Integer, Agencia> myobjeto = new HashMap<Integer, Agencia>();

    public ManagedBeanAgencia() {
        objetoAgencia = new Agencia();
        objetoCiudad = new Ciudad();
        objetoAgencia.setIdAgencia(1);
        objetoEmpresa = new Empresa();
        lista = new LinkedList<Agencia>();
        objetoAgenciaCrear = new Agencia();
        objetoAgenciaCrear.setAgenRUC("");
        objetoAgenciaCrear.setAgenRazSoc("");
        objetoAgenciaCrear.setAgenDireccion("");
        objetoAgenciaCrear.setAgenTelefono("");
        objetoAgenciaCrear.setAgenCelular("");
        objetoAgenciaCrear.setAgenFechaCreacion(new Date());
        objetoAgenciaCrear.setAgenNroEmpleados(null);
        objetoAgenciaCrear.setAgenEstado(true);
    }

    public List<SelectItem> getObjetoItems() {
        lista = new ArrayList<Agencia>();
        objetoItems = new LinkedList<SelectItem>();
        lista = AgenciaFacade.findAll();
        for (Agencia p : lista) {
            if (p.getAgenEstado() == true) {
                myobjeto.put(p.getIdAgencia(), p);
                objetoItems.add(new SelectItem(p, p.getCiudad().getDepartamento().getDepDepartamento() + " " + p.getCiudad().getCiudCiudad() + " " + p.getAgenDireccion()));
            }
        }
        return objetoItems;
    }
    public List<SelectItem> getObjetoItemsNumeracion() {
        lista = new ArrayList<Agencia>();
        objetoItems = new LinkedList<SelectItem>();
        lista = AgenciaFacade.findAll();
        Agencia temp = new Agencia();
        temp.setIdAgencia(-1);
        myobjeto.put(temp.getIdAgencia(), temp);
        objetoItems.add(new SelectItem(temp, "SELECCIONE AGENCIA"));
            
        for (Agencia p : lista) {
            if (p.getAgenEstado() == true) {
                
                myobjeto.put(p.getIdAgencia(), p);
                objetoItems.add(new SelectItem(p, p.getCiudad().getDepartamento().getDepDepartamento() + " " + p.getCiudad().getCiudCiudad() + " " + p.getAgenDireccion()));
            }
        }
        return objetoItems;
    }
    
    public List<SelectItem> getObjetoItems2() {
        lista = new ArrayList<Agencia>();
        objetoItems = new LinkedList<SelectItem>();
        lista = AgenciaFacade.findAll();
        Agencia q = new Agencia(); q.setIdAgencia(0);
        myobjeto.put(q.getIdAgencia(), q);
        objetoItems.add(new SelectItem(q, "Seleccionar Agencia"));
        for (Agencia p : lista) {
            if (p.getAgenEstado() == true) {
                myobjeto.put(p.getIdAgencia(), p);
                objetoItems.add(new SelectItem(p, p.getCiudad().getDepartamento().getDepDepartamento() + " " + p.getCiudad().getCiudCiudad() + " " + p.getAgenDireccion()));
            }
        }
        return objetoItems;
    }    

    public void setObjetoItems(List<SelectItem> objetoItems) {
        this.objetoItems = objetoItems;
    }

    public Empresa getObjetoEmpresa() {
        return objetoEmpresa;
    }

    public void setObjetoEmpresa(Empresa objetoEmpresa) {
        this.objetoEmpresa = objetoEmpresa;
    }

    public Agencia getObjetoAgencia() {
        return objetoAgencia;
    }

    public Agencia getObjetoAgencia(int id) {
        return (Agencia) myobjeto.get(id);
    }

    public void setObjetoAgencia(Agencia objetoAgencia) {
        this.objetoAgencia = objetoAgencia;
    }

    public Agencia getObjetoAgenciaCrear() {
        return objetoAgenciaCrear;
    }

    public void setObjetoAgenciaCrear(Agencia objetoAgenciaCrear) {
        this.objetoAgenciaCrear = objetoAgenciaCrear;
    }

    public List<Agencia> getLista() {
        lista = new LinkedList<Agencia>();
        List<Agencia> listaTemporal = new LinkedList<Agencia>();
        listaTemporal = AgenciaFacade.findAll();
        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
            if (listaTemporal.get(i).getAgenEstado() == true) {
                lista.add(listaTemporal.get(i));
            }
        }
        return lista;
    }

    public void setLista(List<Agencia> lista) {
        this.lista = lista;
    }

    public HashMap<Integer, Agencia> getMyobjeto() {
        return myobjeto;
    }

    public void setMyobjeto(HashMap<Integer, Agencia> myobjeto) {
        this.myobjeto = myobjeto;
    }

    public Ciudad getObjetoCiudad() {
        return objetoCiudad;
    }

    public void setObjetoCiudad(Ciudad objetoCiudad) {
        this.objetoCiudad = objetoCiudad;
    }

    public void insertar() {
        try {
           // if (!verificarSiexiste(objetoAgenciaCrear.getAgenRUC())) {
                objetoAgenciaCrear.setAgenEstado(true);
                objetoAgenciaCrear.setAgenFechaCreacion(new Date());
                objetoAgenciaCrear.setEmpresa(new Empresa(1));
                AgenciaFacade.create(objetoAgenciaCrear);
                FacesMessage msg = new FacesMessage("Informacion", "Registro Ingresado");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                objetoAgenciaCrear = new Agencia();
          /*  } else {
                FacesMessage msg = new FacesMessage("Informacion", "Ya Existe Agencia");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }*/
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void editar() {
        try {
            AgenciaFacade.edit(objetoAgencia);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void eliminar() {
        try {
            objetoAgencia.setAgenEstado(false);
            AgenciaFacade.edit(objetoAgencia);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void onRowSelect(SelectEvent event) {
        FacesMessage msg = new FacesMessage("Agencia Seleccionado", ((Agencia) event.getObject()).getIdAgencia().toString());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void onRowUnselect(UnselectEvent event) {
        FacesMessage msg = new FacesMessage("Agencia No seleccionado", ((Agencia) event.getObject()).getIdAgencia().toString());

        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public boolean verificarSiexiste(String desc) {
        boolean existe = false;
        lista = new LinkedList<Agencia>();
        List<Agencia> listaTemporal = new LinkedList<Agencia>();
        listaTemporal = AgenciaFacade.findAll();
        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
            if (listaTemporal.get(i).getAgenRUC().equalsIgnoreCase(desc) && listaTemporal.get(i).getAgenEstado() == true) {
                existe = true;
            }
        }

        return existe;
    }
}
